package interfaces;

import java.util.List;

import core.Request;

public interface IJobManager {
	
	/**
	 * Mensagem enviada pelo gerente, contendo um novo job a calcular.
	 * 
	 * @param jobId
	 * @param jobDescription
	 */
	void newJob(String jobId, byte[] jobDescription);

	/**
	 * Define uma Identificacao para o node
	 * @param id
	 */
	void setID(String id);

	/**
	 * Obtem a identificacao do node
	 * @return
	 */
	String getID();
	
	/**
	 * Retornar uma lista de tarefas
	 * 
	 * @param min
	 * @param max
	 * @return
	 */
	List<IJob> jobsSelect(int min, int max);
	
	/**
	 * Recebe uma nova requisicao de tarefa
	 * 
	 * @param workRequest
	 */
	void newRequest(Request request);
	
	/**
	 * Define o procurador deste gerente
	 * @return
	 */
	IManagerProxy getManagerProxy();
	
	/**
	 * Retorna o procurador deste gerente
	 * @param managerProxy
	 */
	void setManagerProxy(IManagerProxy managerProxy);
	
	/**
	 * Define o gerente de resposta
	 */
	IAnswerManager getAnswerbManager();
	
	/**
	 * Retorna o gerente de resposta
	 * @param jobManager
	 */
	void setAnswerManager(IAnswerManager answerbManager);
	
	/**
	 * Retorna o gerente de estato
	 * @return
	 */
	IStatusManager getStatusManager();
	
	/**
	 * Define o gerente de estado
	 * @param statusManager
	 */
	void setStatusMManager(IStatusManager statusManager);
}
